package javase.ch02.method;

import java.util.concurrent.TimeUnit;

/**
 * @Desc TODO
 * @Author chenmin
 * @Date 2025/10/30
 *
 * Thread类
 * 1.构造方法
 *   public Thread(Runnable target, String name)
 *
 * 2.常用API方法
 *  public static native void yield();    根据线程的优先级进行退让
 *  属于Thread类的静态方法，一旦调用yield()，当前线程会进行退让，退让给优先级更高的线程；
 *  出现 “假意退让” 的现象，还是会继续参与 “时间片的争抢”，只要再次抢占到时间片就会继续执行任务。
 *
 *  public static native void sleep(long millis) throws InterruptedException;   沉睡
 *  属于Thread类的静态方法，一旦调用sleep()，当前线程会释放CPU执行权（即释放时间片），进入沉睡状态；
 *  此时指定沉睡时间，是它的 “最短不执行任务的时间” ，因为时间结束后，仍然需要争抢时间片，抢到后才能执行任务。
 *
 *  public final synchronized void join(long millis)   计时等待
 *  public final void join()  无限等待
 *
 *  需求：结束顺序  MyThread1 > MyThread2 > main
 */
public class MyThread1 extends Thread{

    public MyThread1(String name){
        super(name);
    }

    @Override
    public void run() {
        System.out.println("MyThread1 开始执行任务...");
        for (int i = 0; i < 10; i++) {
            System.out.println(Thread.currentThread().getName()+" i = "+i);
        }

        //MyThread1 沉睡
        try {
            TimeUnit.SECONDS.sleep(1);
        } catch (InterruptedException e) {
            throw new RuntimeException(e);
        }

        System.out.println("MyThread1 结束执行任务...");
    }
}
